Java 8 এ @FunctionalInterface অ্যানোটেশনটি একটি নতুন ফিচার হিসেবে যোগ করা হয়েছে, যা Functional Interface নির্দেশ করতে ব্যবহৃত হয়। ফাংশনাল ইন্টারফেসের মূল উদ্দেশ্য হল এমন একটি ইন্টারফেস তৈরি করা যা একটি মাত্র অ্যাবস্ট্র্যাক্ট মেথড ধারণ করে। এর মাধ্যমে, Java 8 এর Lambda Expressions এবং Method References এর সুবিধা গ্রহণ করা সম্ভব হয়।
যেহেতু Java 8 থেকে Lambda Expressions সমর্থিত, একমাত্র ফাংশনাল ইন্টারফেসগুলোই এই ফিচার ব্যবহার করতে পারে। @FunctionalInterface অ্যানোটেশন ইন্টারফেসটি ফাংশনাল ইন্টারফেস হিসেবে চিহ্নিত করে, যা কোডের পরিষ্কারতা এবং ভুল এড়ানোর জন্য সহায়ক।
@FunctionalInterface Annotation এর ধারণা:
- Functional Interface: এটি এমন একটি ইন্টারফেস যা শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড থাকে, এবং এটি Lambda Expressions অথবা Method References এর মাধ্যমে প্রয়োগ করা যেতে পারে।
@FunctionalInterfaceঅ্যানোটেশন: এই অ্যানোটেশনটি শুধুমাত্র ফাংশনাল ইন্টারফেসকে চিহ্নিত করে। যদি আপনি একটি ইন্টারফেসে এই অ্যানোটেশন ব্যবহার করেন, তবে Java কন্টেইনার এটি নিশ্চিত করবে যে সেই ইন্টারফেসে শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড আছে। যদি আপনি আরও এক্সট্রা অ্যাবস্ট্র্যাক্ট মেথড যুক্ত করেন, তবে এটি একটি কম্পাইল টাইম এরর দিবে।
@FunctionalInterface অ্যানোটেশন ব্যবহার:
@FunctionalInterface অ্যানোটেশনটি একটি ইন্টারফেসের উপরে যোগ করতে হয়। এই অ্যানোটেশনটি ব্যবহৃত হলে, ইন্টারফেসে অবশ্যই একটি অ্যাবস্ট্র্যাক্ট মেথড থাকতে হবে। পাশাপাশি, default এবং static মেথড থাকলেও কোনো সমস্যা নেই, কারণ এগুলি অ্যাবস্ট্র্যাক্ট মেথডের মধ্যে গণ্য হয় না।
@FunctionalInterface উদাহরণ:
@FunctionalInterface
public interface Calculator {
int add(int a, int b); // Single abstract method (SAM)
// Default method (Not counted as abstract)
default int multiply(int a, int b) {
return a * b;
}
// Static method (Not counted as abstract)
static int subtract(int a, int b) {
return a - b;
}
}
এখানে, Calculator ইন্টারফেস একটি Functional Interface কারণ এতে শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড (add) রয়েছে।
multiplyএকটি default method এবংsubtractএকটি static method, যা abstract মেথড হিসেবে গণ্য হয় না।
Lambda Expression এর সাথে ব্যবহার:
ফাংশনাল ইন্টারফেসের সাথে Lambda Expression ব্যবহার করা হয় যা কোডকে আরও সংক্ষিপ্ত এবং পরিষ্কার করে।
public class CalculatorDemo {
public static void main(String[] args) {
// Lambda Expression for 'add' method
Calculator calculator = (a, b) -> a + b;
// Using the method
System.out.println("Addition: " + calculator.add(5, 3)); // Output: 8
// Calling default method
System.out.println("Multiplication: " + calculator.multiply(5, 3)); // Output: 15
// Calling static method
System.out.println("Subtraction: " + Calculator.subtract(5, 3)); // Output: 2
}
}
এখানে, Lambda Expression (a, b) -> a + b ব্যবহার করে Calculator ইন্টারফেসের add মেথডটি বাস্তবায়ন করা হয়েছে।
@FunctionalInterface এর সুবিধা:
- Compile-time Check:
@FunctionalInterfaceঅ্যানোটেশন ব্যবহারের ফলে কম্পাইলারটি নিশ্চিত করে যে ইন্টারফেসটি সঠিকভাবে ফাংশনাল ইন্টারফেস হিসেবে চিহ্নিত করা হয়েছে এবং এতে শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড রয়েছে। যদি আরো এক্সট্রা অ্যাবস্ট্র্যাক্ট মেথড থাকে, তবে এটি কম্পাইল টাইমে একটি ত্রুটি (error) প্রদর্শন করবে।
- Clear Intent:
@FunctionalInterfaceঅ্যানোটেশন কোডের উদ্দেশ্যকে স্পষ্ট করে তোলে। এটি নির্দেশ করে যে এই ইন্টারফেসটি একটি ফাংশনাল ইন্টারফেস এবং শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড থাকবে।
- Readability:
- ফাংশনাল ইন্টারফেস ব্যবহার করার মাধ্যমে কোড আরও পরিষ্কার এবং সহজে রিডেবল হয়, কারণ এর মধ্যে একাধিক অ্যাবস্ট্র্যাক্ট মেথড থাকবে না, যা কোডের জটিলতা বাড়ায়।
- Lambda Expressions:
- ফাংশনাল ইন্টারফেস ব্যবহার করে আপনি Lambda Expressions এবং Method References এর মাধ্যমে আরও সংক্ষিপ্ত এবং কার্যকর কোড লেখতে পারবেন।
@FunctionalInterface অ্যানোটেশন সম্পর্কিত কিছু নিয়ম:
- একটি মাত্র অ্যাবস্ট্র্যাক্ট মেথড থাকতে হবে: ফাংশনাল ইন্টারফেসে শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড থাকতে হবে। আপনি অন্যান্য মেথড যেমন default এবং static মেথড রাখতে পারেন, তবে তা abstract হিসেবে গণ্য হবে না।
@FunctionalInterfaceঅ্যানোটেশন ব্যবহার ঐচ্ছিক: @FunctionalInterface অ্যানোটেশনটি ব্যবহার করা অবশ্যই জরুরি নয়। যদি আপনি ইন্টারফেসে শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড রাখেন, তবে Java নিজেই সেটিকে ফাংশনাল ইন্টারফেস হিসেবে বিবেচনা করবে। তবে, অ্যানোটেশনটি ব্যবহার করলে কম্পাইলার চেক করবে যে এটি একটি ফাংশনাল ইন্টারফেস।
সারাংশ:
@FunctionalInterface অ্যানোটেশনটি Java 8 এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ফাংশনাল ইন্টারফেস চিহ্নিত করতে ব্যবহৃত হয়। এটি একটি ইন্টারফেসের মধ্যে শুধুমাত্র একটি অ্যাবস্ট্র্যাক্ট মেথড থাকতে হবে তা নিশ্চিত করে এবং Lambda Expressions বা Method References এর সুবিধা গ্রহণ করতে সাহায্য করে। ফাংশনাল ইন্টারফেস ব্যবহারের মাধ্যমে আপনি Java-তে ফাংশনাল প্রোগ্রামিংয়ের সুবিধা নিতে পারেন, যেমন কোডের মডুলারিটি, রিডেবিলিটি, এবং টেস্টেবিলিটি উন্নত করা।
Read more